//
//  VisitorLoginView.swift
//  Weibo
//
//  Created by rmjycbs  on 16/1/12.
//  Copyright © 2016年 rmjycbs . All rights reserved.
//

import UIKit
//导入SnapKit 的命名空间
import SnapKit

//1.protocol:swift中 没有 '@'
//2.遵守根协议 <NSObject>
//3.如果不遵守 NSObjectProtocol<基协议> 就无法使用 weak 关键字
//4.声明可选的协议方法 需要使用 optional关键字 是 OC中的关键字 需要在声明的协议前 加上 '@objc'

@objc protocol VisitorLoginViewDelegate: NSObjectProtocol {
    //协议方法
    //用户将要注册
    optional func userWillRegister()
    //用户将要登录
    func userWillLogin()
}

class VisitorLoginView: UIView {
    //声明代理 swift属性 默认的属性关键字 就是 strong
    //声明弱引用的属性 需要 weak
  
    weak var visitorLoginViewDelegate: VisitorLoginViewDelegate?
    
    //MARK:按钮的监听事件方法
    @objc private func registerBtnDidClick(){
        
        visitorLoginViewDelegate?.userWillRegister?()
        
    }
    @objc private func loginBtnDidClick(){
        
        visitorLoginViewDelegate?.userWillLogin()
    }
    
 
//供外界调用的方法
    func setupUIWithInfo(imageName:String?,tipText:String){
        if let img = imageName {
            circleIcon.image = UIImage(named: img)
            //隐藏大房子
            largeHouse.hidden = true
            bringSubviewToFront(circleIcon)
        }else{
            //说明在首页
            startAnimation()
        }
        tipLabel.text = tipText
    }
    
    //圈圈的动画效果
    func startAnimation(){
        //基本动画
        let base = CABasicAnimation(keyPath: "transform.rotation")
        //重复次数
        base.repeatCount = MAXFLOAT
        base.toValue = 2 * M_PI
        //持续时间
        base.duration = 10
        //动画失去活跃后，不移除图层
        base.removedOnCompletion = false
        //添加动画
        circleIcon.layer.addAnimation(base, forKey:nil)
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
        //设置UI
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
   private func  setupUI(){
    //添加子视图
    addSubview(circleIcon)
    //遮盖圈圈的图片
    addSubview(backView)
    addSubview(largeHouse)
    addSubview(tipLabel)
    addSubview(loginBtn)
    addSubview(registerBtn)
    
    //设置自动布局
    /*
    苹果手码布局 VFL    NSLayoutConstraint
    参数：
    1.item: 表示要设置约束的对象
    2.attribute: 需要添加约束的属性
    3.relatedBy: 参照方法 一般使用 精准参照 .Equal\
    4.toItem: 约束被参照的对象
    attribute:被参照约束的属性
    
    view1.attr1 = view2.attr2 * multiplier + constant
    */
    
    //   注意一点 自动布局能够生效 需要屏蔽frame布局方式
//    circleIcon.translatesAutoresizingMaskIntoConstraints = false
    //将约束对象添加到 父视图上
    /*
    self.addConstraint(NSLayoutConstraint(item: circleIcon,
        attribute: .CenterX,
        relatedBy: .Equal, t
        oItem: self,
        attribute: .CenterX,
        multiplier: 1,
        constant: 0))
    
    */
    
    //==========推荐链式约束 SnapKit==============
    //snp_makeConstraints 表示添加一条约束
    //图片布局
    circleIcon.snp_makeConstraints { (make) -> Void in
        make.centerX.equalTo(self.snp_centerX)
        //垂直居中，添加偏移量
        make.centerY.equalTo(self.snp_centerY).offset(-80)
    }
    //遮盖布局
    backView.snp_makeConstraints { (make) -> Void in
        make.top.left.right.equalTo(self)
        make.bottom.equalTo(registerBtn.snp_bottom)
    }
    //圈圈布局
    largeHouse.snp_makeConstraints { (make) -> Void in
        make.center.equalTo(circleIcon.snp_center)
    }
    //文本布局
    tipLabel.snp_makeConstraints { (make) -> Void in
        make.centerX.equalTo(circleIcon.snp_centerX)
        make.top.equalTo(circleIcon.snp_bottom).offset(16)
        //宽度约束
        make.width.equalTo(225)
        //防止页面跳转
        make.height.equalTo(40)
    }
    //登录布局
    loginBtn.snp_makeConstraints { (make) -> Void in
        make.left.equalTo(tipLabel.snp_left)
        make.top.equalTo(tipLabel.snp_bottom).offset(16)
        make.width.equalTo(100)
    }
    //注册布局
    registerBtn.snp_makeConstraints { (make) -> Void in
        make.right.equalTo(tipLabel.snp_right)
        make.top.equalTo(tipLabel.snp_bottom).offset(16)
        make.width.equalTo(100)
    }
    
    //把view的背景颜色调成和遮盖图片颜色一样
    self.backgroundColor = UIColor(white: 0.93, alpha: 1)
    
    //添加监听事件
    loginBtn.addTarget(self, action: "loginBtnDidClick", forControlEvents: .TouchUpInside)
    registerBtn.addTarget(self, action: "registerBtnDidClick", forControlEvents: .TouchUpInside)
    
        
    }
    // MARK : 懒加载获取所有子视图
    //背景
    lazy var backView:UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_mask_smallicon"))
    //圈圈
     lazy var circleIcon:UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_smallicon"))
    //大房子
     lazy var largeHouse:UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_house"))
    //提示文案
    lazy var tipLabel:UILabel = {
        let l = UILabel()
        l.font = UIFont.systemFontOfSize(14)
        l.text = "登录后,别人评论你的微薄别人评论你的微薄别人评论你的微"
        //设置行数
        l.numberOfLines = 0
        l.textAlignment = .Center
        l.textColor = UIColor.darkGrayColor()
        //设置大小
        l.sizeToFit()
        return l
    }()
    //登录按钮
    lazy var loginBtn:UIButton = {
        let btn = UIButton()
        //设置按钮文字
        btn.setTitle("登录", forState: .Normal)
         //设置按钮文字大小
        btn.titleLabel?.font = UIFont.systemFontOfSize(16)
         //设置按钮文字颜色
        btn.setTitleColor(UIColor.darkGrayColor(), forState: .Normal)
         //设置按钮背景图片
        btn.setBackgroundImage(UIImage(named: "common_button_white_disable"), forState: .Normal)
        
        return btn
    }()
    
    //注册按钮
    lazy var registerBtn:UIButton = {
        let btn = UIButton()
        //设置按钮文字
        btn.setTitle("注册", forState: .Normal)
        //设置按钮文字大小
        btn.titleLabel?.font = UIFont.systemFontOfSize(16)
        //设置按钮文字颜色
        btn.setTitleColor(UIColor.darkGrayColor(), forState: .Normal)
        //设置按钮背景图片
        //拉伸图片
        let image = UIImage(named: "common_button_white_disable")!
        let w = Int(image.size.width/2)
        let h = Int(image.size.height/2)
        btn.setBackgroundImage(image.stretchableImageWithLeftCapWidth(w, topCapHeight: h ),forState: .Normal)
        return btn
    }()
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

}
